package org.tvbrowser.settings;
import java.util.Calendar;
import java.util.GregorianCalendar;
import android.content.Context;
import android.content.res.TypedArray;
import android.preference.DialogPreference;
import android.text.format.DateFormat;
import android.util.AttributeSet;
import android.view.View;
import android.widget.TimePicker;
import org.tvbrowser.utils.CompatUtils;
public class TimePreference extends DialogPreference {
private Calendar mTime;
private TimePicker mTimePicker;
public TimePreference(Context context, AttributeSet attrs) {
super(context,attrs);
setPositiveButtonText(android.R.string.ok);
setNegativeButtonText(android.R.string.cancel);
mTime = new GregorianCalendar();
}
@Override
protected View onCreateDialogView() {
mTimePicker = new TimePicker(getContext());
mTimePicker.setIs24HourView(DateFormat.is24HourFormat(getContext()));
return mTimePicker;
}
@Override
protected void onBindDialogView(View view) {
super.onBindDialogView(view);
CompatUtils.setTimePickerHour(mTimePicker, mTime.get(Calendar.HOUR_OF_DAY));
CompatUtils.setTimePickerMinute(mTimePicker, mTime.get(Calendar.MINUTE));
}
@Override
protected void onDialogClosed(boolean positiveResult) {
super.onDialogClosed(positiveResult);
if(positiveResult) {
mTime.set(Calendar.HOUR_OF_DAY, CompatUtils.getTimePickerHour(mTimePicker));
mTime.set(Calendar.MINUTE, CompatUtils.getTimePickerMinute(mTimePicker));
int minutes = CompatUtils.getTimePickerHour(mTimePicker) * 60 + CompatUtils.getTimePickerMinute(mTimePicker);
setTitle(DateFormat.getTimeFormat(getContext()).format(mTime.getTime()));
if (callChangeListener(minutes)) {
persistInt(minutes);
}
}
}
@Override
protected Object onGetDefaultValue(TypedArray a, int index) {
return(a.getInt(index, 0));
}
@Override
protected void onSetInitialValue(boolean restorePersistedValue, Object defaultValue) {
int minutes = 0;
if(restorePersistedValue) {
if(defaultValue == null) {
minutes = getPersistedInt(0);
}
else {
minutes = getPersistedInt((Integer)defaultValue);
}
}
else {
minutes = (Integer)defaultValue;
}
mTime.set(Calendar.HOUR_OF_DAY, minutes / 60);
mTime.set(Calendar.MINUTE, minutes % 60);
setTitle(DateFormat.getTimeFormat(getContext()).format(mTime.getTime()));
}
}